package simpleftp.server;

import java.net.ServerSocket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Simple serveur TCP creant des thread pour gerer chaque connexion client.
 *
 * @author lom
 */
public class FTPServerMain {

    /**
     * Port d'ecoute.
     */
    public static final int PORT = 7802;
    /**
     * Socket serveur d'accueil.
     */
    private static ServerSocket socketaccueil;
    private static int poolSize;
    private static int numberOfCores;
    private static int blockingCoefficient;
    private static ExecutorService executorPool;

    public static void main(String argv[]) throws Exception {
        // TODO MAKE IT MULTITHREAD (about 4 lines)
        numberOfCores = Runtime.getRuntime().availableProcessors();
        poolSize = (int) (numberOfCores / (1 - blockingCoefficient));
        executorPool = Executors.newFixedThreadPool(poolSize);

        try {
            socketaccueil = new ServerSocket(PORT);
            System.out.println("Server up and running.");
            FTPServer.setDebug(true);
            while (true) {

                FTPServer server = new FTPServer(socketaccueil.accept());

                // TODO Modify for multithreading
                executorPool.submit(server);
            }
        } finally {
            if (socketaccueil != null) {
                socketaccueil.close();
            }
        }
    }

}
